home *** CD-ROM | disk | FTP | other *** search
/ ftp.cs.arizona.edu / ftp.cs.arizona.edu.tar / ftp.cs.arizona.edu / icon / newsgrp / group99a.txt / 000166_icon-group-sender _Tue Jul 27 12:22:12 1999.msg < prev    next >
Internet Message Format  |  2000-09-20  |  10KB

  1. Return-Path: <icon-group-sender>
  2. Received: (from root@localhost)
  3.     by baskerville.CS.Arizona.EDU (8.9.1a/8.9.1) id MAA18656
  4.     for icon-group-addresses; Tue, 27 Jul 1999 12:21:44 -0700 (MST)
  5. Message-Id: <199907271921.MAA18656@baskerville.CS.Arizona.EDU>
  6. From: "Frank Lhota" <lhotaf@lexma.meitech.com>
  7. To: <icon-group@optima.CS.Arizona.EDU>
  8. Subject: The Correct Basename Documentation
  9. Date: Tue, 27 Jul 1999 12:31:17 -0400
  10. X-Priority: 3
  11. X-MSMail-Priority: Normal
  12. X-MimeOLE: Produced By Microsoft MimeOLE V5.00.2314.1300
  13. Errors-To: icon-group-errors@optima.CS.Arizona.EDU
  14. Status: RO
  15.  
  16. This is a multi-part message in MIME format.
  17.  
  18. ------=_NextPart_000_0022_01BED82B.EC3433B0
  19. Content-Type: text/plain;
  20.     charset="iso-8859-1"
  21. Content-Transfer-Encoding: quoted-printable
  22.  
  23. Recently, we have been discussing the basename procedure in the 9.3.2 =
  24. library. It has been noted that the behavior of the procedure has =
  25. changed without any modification in the documentation. There is general =
  26. agreement that either the procedure or the documentation should be =
  27. changed in order to bring them into agreement. Norman Ramsey made a very =
  28. good point regarding this discussion:
  29.  
  30.   A wise man once said, ``If you change the specification of a =
  31. procedure, also change its name.''
  32.  
  33. In general, I strongly agree with this principle. Identifier names are =
  34. one of the most valuable forms of internal documentation. It is a shame =
  35. that so many programmers treat identifier naming as a second class =
  36. issue. The name of a procedure should express what a procedure does, and =
  37. if the actions of that procedure changes, its name should change to =
  38. express its current actions.
  39.  
  40. In this case, however, we have a case where the procedure has not =
  41. behaved as its name suggests until recently. The name suggests an =
  42. internal version of the Unix basename utility. The procedure header =
  43. makes this link. Until the 9.3.2 library, however, the basename =
  44. procedure has not behaved the same as its namesake Unix utility. If the =
  45. Unix basename utility is not provided with a suffix, or if the specified =
  46. suffix is not at the end of the name, then basename prints everything =
  47. past the path info. Try this at a Unix command line:
  48.  
  49.   $ basename /usr/icon/ipl/procs/basename.icn .icn
  50.   basename
  51.   $ basename /usr/icon/ipl/procs/basename.icn
  52.   basename.icn
  53.   $ basename /usr/icon/ipl/procs/basename.icn .c
  54.   basename.icn
  55.  
  56. In the previous versions of the Icon basename procedure, if the suffix =
  57. was absent or not found at the end, the procedure would lop off both the =
  58. path and everything past the first period. Before the 9.3.2 library, the =
  59. name of this procedure has therefore been misleading.
  60.  
  61. As a result, the right way to keep basename true to its name is too keep =
  62. its current behavior, that is, matching its Unix namesake. The =
  63. documentation should be updated to reflect this. Here is how =
  64. basename.icn should look:
  65.  
  66. #########################################################################=
  67. ###
  68. #
  69. # File:     basename.icn
  70. #
  71. # Subject:  Procedures to produce base name of a file
  72. #
  73. # Author:   Ralph E. Griswold
  74. #
  75. # Date:     September 22, 1998
  76. #
  77. #########################################################################=
  78. ###
  79. #
  80. #   This file is in the public domain.
  81. #
  82. #########################################################################=
  83. ###
  84. #
  85. #  Contributor:  Charles Shartsis
  86. #
  87. #  Updated By: Frank J. Lhota
  88. #
  89. #########################################################################=
  90. ###
  91. #
  92. #  This procedure is based on the UNIX basename(1) utility.  It strips =
  93. off
  94. #  any path information. If a suffix is specified, and the stripped name
  95. #  ends with the suffix, the suffix will be stripped off too.
  96. #
  97. #  It should work under UNIX, MS-DOS, and the Macintosh.
  98. #
  99. #########################################################################=
  100. ###
  101.  
  102. procedure basename(name, suffix)  #: base name of file
  103.    local base
  104.  
  105.    name ? {
  106.       while tab ( upto('/\\:') + 1 )  # get rid of path, if any
  107.       if ( base :=3D tab ( -*\suffix ) ) & =3Dsuffix
  108.          then return base
  109.          else return tab ( 0 )
  110.       }
  111. end
  112.  
  113.  
  114.  
  115. ------=_NextPart_000_0022_01BED82B.EC3433B0
  116. Content-Type: text/html;
  117.     charset="iso-8859-1"
  118. Content-Transfer-Encoding: quoted-printable
  119.  
  120. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  121. <HTML><HEAD>
  122. <META content=3D"text/html; charset=3Diso-8859-1" =
  123. http-equiv=3DContent-Type>
  124. <META content=3D"MSHTML 5.00.2614.3401" name=3DGENERATOR>
  125. <STYLE></STYLE>
  126. </HEAD>
  127. <BODY bgColor=3D#ffffff>
  128. <DIV><FONT size=3D2>Recently, we have been discussing the basename =
  129. procedure in=20
  130. the 9.3.2 library. It has been noted that the behavior of the procedure =
  131. has=20
  132. changed without any modification in the documentation. There is general=20
  133. agreement that either the procedure or the documentation should be =
  134. changed in=20
  135. order to bring them into agreement. Norman Ramsey made a very good point =
  136.  
  137. regarding this discussion:</FONT></DIV>
  138. <DIV> </DIV>
  139. <BLOCKQUOTE style=3D"MARGIN-RIGHT: 0px">
  140.   <DIV><FONT size=3D2>A wise man once said, ``If you change the =
  141. specification of a=20
  142.   procedure, also change its name.''</FONT></DIV></BLOCKQUOTE>
  143. <DIV style=3D"MARGIN-RIGHT: 0px"><FONT size=3D2></FONT> </DIV>
  144. <DIV><FONT size=3D2>In general, I strongly agree with this principle. =
  145. Identifier=20
  146. names are one of the most valuable forms of internal documentation. It =
  147. is a=20
  148. shame that so many programmers treat identifier naming as a second class =
  149. issue.=20
  150. The name of a procedure should express what a procedure does, and if the =
  151. actions=20
  152. of that procedure changes, its name should change to express its current =
  153.  
  154. actions.</FONT></DIV>
  155. <DIV> </DIV>
  156. <DIV><FONT size=3D2>In this case, however, we have a case where the =
  157. procedure has=20
  158. not behaved as its name suggests until recently. The name suggests an =
  159. internal=20
  160. version of the Unix basename utility. The procedure header makes this =
  161. link.=20
  162. Until the 9.3.2 library, however, the basename procedure has not behaved =
  163. the=20
  164. same as its namesake Unix utility. If the Unix basename utility is not =
  165. provided=20
  166. with a suffix, or if the specified suffix is not at the end of the name, =
  167. then=20
  168. basename prints everything past the path info. Try this at a Unix =
  169. command=20
  170. line:</FONT></DIV>
  171. <DIV> </DIV>
  172. <BLOCKQUOTE style=3D"MARGIN-RIGHT: 0px">
  173.   <DIV><FONT face=3D"Courier New" size=3D2>$ basename=20
  174.   /usr/icon/ipl/procs/basename.icn .icn</FONT></DIV>
  175.   <DIV><FONT face=3D"Courier New" size=3D2>basename</FONT></DIV>
  176.   <DIV><FONT face=3D"Courier New" size=3D2>$ basename=20
  177.   /usr/icon/ipl/procs/basename.icn</FONT></DIV>
  178.   <DIV><FONT face=3D"Courier New" size=3D2>basename.icn</FONT></DIV>
  179.   <DIV><FONT face=3D"Courier New" size=3D2>$ basename=20
  180.   /usr/icon/ipl/procs/basename.icn .c</FONT></DIV>
  181.   <DIV><FONT face=3D"Courier New" =
  182. size=3D2>basename.icn</FONT></DIV></BLOCKQUOTE>
  183. <DIV><FONT size=3D2></FONT> </DIV>
  184. <DIV><FONT size=3D2>In the previous versions of the Icon basename =
  185. procedure, if=20
  186. the suffix was absent or not found at the end, the procedure would lop =
  187. off both=20
  188. the path and everything past the first period. Before the 9.3.2 =
  189. library,=20
  190. the name of this procedure has therefore been misleading.</FONT></DIV>
  191. <DIV> </DIV>
  192. <DIV><FONT size=3D2>As a result, the right way to keep basename true to =
  193. its name=20
  194. is too keep its current behavior, that is, matching its Unix =
  195. namesake. The=20
  196. documentation should be updated to reflect this. Here is how =
  197. basename.icn should=20
  198. look:</FONT></DIV>
  199. <DIV> </DIV>
  200. <DIV><FONT face=3D"Courier New"=20
  201. size=3D2>################################################################=
  202. ############<BR>#<BR># File:    =20
  203. basename.icn<BR>#<BR># Subject:  Procedures to produce base =
  204. name of a=20
  205. file<BR>#<BR># Author:   Ralph E.=20
  206. Griswold<BR>#<BR># Date:     September 22,=20
  207. 1998<BR>#<BR>############################################################=
  208. ################<BR>#<BR>#  =20
  209. This file is in the public=20
  210. domain.<BR>#<BR>#########################################################=
  211. ###################<BR>#<BR># =20
  212. Contributor:  Charles Shartsis<BR>#<BR>#  Updated By: Frank J. =
  213.  
  214. Lhota<BR>#<BR>###########################################################=
  215. #################<BR>#<BR># =20
  216. This procedure is based on the UNIX basename(1) utility.  It strips =
  217.  
  218. off<BR>#  any path information. If a suffix is specified, and the =
  219. stripped=20
  220. name<BR>#  ends with the suffix, the suffix will be stripped off=20
  221. too.<BR>#<BR>#  It should work under UNIX, MS-DOS, and the=20
  222. Macintosh.<BR>#<BR>######################################################=
  223. ######################</FONT></DIV>
  224. <DIV> </DIV>
  225. <DIV><FONT face=3D"Courier New" size=3D2>procedure basename(name, =
  226. suffix)  #:=20
  227. base name of file<BR>   local base</FONT></DIV>
  228. <DIV> </DIV>
  229. <DIV><FONT face=3D"Courier New" size=3D2>   name ?=20
  230. {<BR>      while tab ( upto('/\\:') + 1 )  =
  231. # get=20
  232. rid of path, if any<BR>      if ( base :=3D tab =
  233. (=20
  234. -*\suffix ) ) & =
  235. =3Dsuffix<BR>        =20
  236. then return base<BR>         =
  237. else return=20
  238. tab ( 0 )<BR>      }<BR>end<BR></FONT></DIV>
  239. <DIV><FONT size=3D2></FONT> </DIV></BODY></HTML>
  240.  
  241. ------=_NextPart_000_0022_01BED82B.EC3433B0--
  242.  
  243.